class Cat {
  constructor(name) {
    this.name = name;
  }
}

const p = new Proxy(Cat, {
  /**
   *
   * @param {*} target 源构造函数
   * @param {*} args 参数列表,数组
   * @param {*} newTarget 代理构造函数,也就是当前的p
   */
  construct: function (target, args, newTarget) {
    console.log(target, args, newTarget);
    return new target(...args);
  },
});

const proxy_cat = new p('zhangsan'); // 可以被拦截
console.log(proxy_cat);

const pp = p('liosi'); // 抛出错误,必须要使用new操作符
